package com.delio.client.pagos.empleados;

import com.delio.client.idioma.DelioConstants;
import com.delio.client.pagos.contratos.PanelNuevoContrato;
import com.delio.client.util.MensajeData;
import com.delio.client.util.Utilities;
import com.extjs.gxt.ui.client.data.BaseFilterPagingLoadConfig;
import com.extjs.gxt.ui.client.data.BasePagingLoadConfig;
import com.extjs.gxt.ui.client.data.BasePagingLoader;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.data.BeanModelReader;
import com.extjs.gxt.ui.client.data.FilterPagingLoadConfig;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.extjs.gxt.ui.client.data.PagingLoader;
import com.extjs.gxt.ui.client.data.RpcProxy;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;

public class Empleados {

	private static EmpleadoServiceAsync ms = GWT.create(EmpleadoService.class);
	private static DelioConstants k = GWT.create(DelioConstants.class);

	public static ListStore<BeanModel> store;
	public static PagingLoader<PagingLoadResult<ModelData>> loader;

	public static Integer empleado_id;
	public static PanelNuevoEmpleado panelnuevoempleado;
	public static PanelNuevoContrato panelnuevocontrato;
  
	public static String filter;

	public static void getPaginate() {
		RpcProxy<PagingLoadResult<Empleado>> proxy = new RpcProxy<PagingLoadResult<Empleado>>() {

			@Override
			protected void load(Object loadConfig,
					AsyncCallback<PagingLoadResult<Empleado>> callback) {
				ms.paginateEmpleado((FilterPagingLoadConfig) loadConfig,
						filter, callback);
			}
		};

		loader = new BasePagingLoader<PagingLoadResult<ModelData>>(proxy,
				new BeanModelReader()) {

			protected Object newLoadConfig() {
				BasePagingLoadConfig config = new BaseFilterPagingLoadConfig();
				return config;
			}

		};

		loader.setRemoteSort(true);
		store = new ListStore<BeanModel>(loader);

	}

	public static void save(Empleado emp) {
		empleado_id = emp.getId();
	
		ms.save(emp, new AsyncCallback<MensajeData>() {

			@Override
			public void onFailure(Throwable caught) {
				MessageBox.alert(k.sistemaDelio(), k.errorConexion(), null);
			}

			@Override
			public void onSuccess(MensajeData result) {
				
			
				if (result.guardado) {
				
					//if (empleado_id != null)
					loader.load(0, Utilities.itemsPerPage);
                   	 panelnuevocontrato.save(result.guardado_id);
					panelnuevoempleado.reset();

				} else {
					if (result.errorTipo == 2)
						MessageBox.alert(k.sistemaDelio(), k.DniDuplicado(),null);
					else
						MessageBox.alert(k.sistemaDelio(),k.empleadoNoGuardado(), null);
				}
			}
		});

	}

	public static void delete(Integer id) {
		ms.delete(id, new AsyncCallback<MensajeData>() {

			@Override
			public void onSuccess(MensajeData result) {
				if (result.guardado) {
					Integer offset = loader.getOffset();
					loader.load(offset, Utilities.itemsPerPage);
				} else if (result.errorTipo == 1)
					MessageBox.alert(k.sistemaDelio(), k.empleadoRelacionado(),
							null);
				else
					MessageBox.alert(k.sistemaDelio(), k.empleadoNoEliminado(),
							null);

			}

			@Override
			public void onFailure(Throwable caught) {
				MessageBox.alert(k.sistemaDelio(), k.errorConexion(), null);

			}
		});

	}

	public static void deleteAll(String ids) {
		ms.deleteAll(ids, new AsyncCallback<MensajeData>() {

			@Override
			public void onSuccess(MensajeData result) {
				if (result.guardado) {
					Integer offset = loader.getOffset();
					loader.load(offset, Utilities.itemsPerPage);
				} else if (result.errorTipo == 1)
					MessageBox.alert(k.sistemaDelio(),
							k.empleadoRelacionados(), null);
				else
					MessageBox.alert(k.sistemaDelio(), k.empleadoNoEliminados(),
							null);

			}

			@Override
			public void onFailure(Throwable caught) {
				MessageBox.alert(k.sistemaDelio(), k.errorConexion(), null);

			}
		});

	}
}
